package main

// 74. 搜索二维矩阵
func main() {
	matrix := [][]int{
		{1},
	}
	target := 1
	res := searchMatrix2(matrix, target)
	println(res)

}

func searchMatrix2(matrix [][]int, target int) bool {
	// 矩阵铺平，再二分查找
	if len(matrix) == 0 || len(matrix[0]) == 0 {
		return false
	}
	X := len(matrix)
	Y := len(matrix[0])

	left, right := 0, X*Y-1

	for left <= right {
		mid := (right-left)/2 + left

		midX := mid / Y
		midY := mid % Y

		midNum := matrix[midX][midY]

		if midNum == target {
			return true
		} else if midNum > target {
			right = mid - 1
		} else {
			left = mid + 1
		}
	}

	return false
}

// 给你一个满足下述两条属性的 m x n 整数矩阵：
//
//每行中的整数从左到右按非严格递增顺序排列。
//每行的第一个整数大于前一行的最后一个整数。
//给你一个整数 target ，如果 target 在矩阵中，返回 true ；否则，返回 false 。
//
//示例 1：
//
//输入：matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 3
//输出：true
//示例 2：
//
//输入：matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 13
//输出：false
//
//提示：
//
//m == matrix.length
//n == matrix[i].length
//1 <= m, n <= 100
//-104 <= matrix[i][j], target <= 104
